/**
 * @file 通用类型定义
 * @description 定义系统中使用的通用数据类型
 * @date 2024-06-18
 */

/**
 * ISO格式时间戳类型
 */
export type ISOTimestamp = string; // ISO 8601格式，如"2024-06-18T10:30:00Z"

/**
 * Unix时间戳类型
 */
export type UnixTimestamp = number; // Unix时间戳，单位毫秒

/**
 * 时间戳类型，可以是ISO格式字符串或Unix时间戳数字
 */
export type Timestamp = ISOTimestamp | UnixTimestamp;

/**
 * 可空类型，表示类型T或null
 */
export type Nullable<T> = T | null;

/**
 * 可选类型，表示类型T或undefined
 */
export type Optional<T> = T | undefined;

/**
 * 剔除类型T中的指定属性K
 */
export type Without<T, K extends keyof T> = Pick<T, Exclude<keyof T, K>>;

/**
 * 将指定属性设为可选
 */
export type PartialPick<T, K extends keyof T> = Partial<Pick<T, K>> & Omit<T, K>;

/**
 * 深度可选，递归设置所有属性为可选
 */
export type DeepPartial<T> = T extends object 
  ? { [P in keyof T]?: DeepPartial<T[P]> } 
  : T;

/**
 * API响应数据类型
 */
export interface ApiResponse<T = any> {
  success: boolean;
  code: number;
  message: string;
  data?: T;
  timestamp?: Timestamp;
}

/**
 * 分页数据类型
 */
export interface PagedData<T = any> {
  total: number;
  page: number;
  pageSize: number;
  items: T[];
}

/**
 * 查询参数类型
 */
export interface QueryParams {
  page?: number;
  pageSize?: number;
  sortBy?: string;
  sortOrder?: 'asc' | 'desc';
  [key: string]: any;
}

/**
 * 用户数据类型
 */
export interface User {
  id: string;
  name: string;
  avatar?: string;
  role?: string;
  permissions?: string[];
  token?: string;
}

/**
 * 基础实体类型，可用于继承
 */
export interface BaseEntity {
  id: string;
  createTime?: Timestamp;
  updateTime?: Timestamp;
} 